home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_147 / sys / atari / atari.zoo / cinfo.c < prev    next >
C/C++ Source or Header  |  1988-07-25  |  7KB  |  213 lines

  1. /* cinfo.c -- character class tables for the Atari ST 8-bit character set
  2.  *
  3.  * author :  Sandra Loosemore
  4.  * date   :  26 Oct 1987
  5.  *
  6.  */
  7.  
  8. #include    "..\..\def.h"
  9.  
  10. /*
  11.  * This table, indexed by a character drawn
  12.  * from the 256 member character set, is used by my
  13.  * own character type macros to answer questions about the
  14.  * type of a character. It handles the full multinational
  15.  * character set, and lets me ask some questions that the
  16.  * standard "ctype" macros cannot ask.
  17.  */
  18.  
  19. char cinfo[256] = {
  20.     _C,        _C,        _C,        _C,    /* 0x0X */
  21.     _C,        _C,        _C,        _C,
  22.     _C,        _C,        _C,        _C,
  23.     _C,        _C,        _C,        _C,
  24.     _C,        _C,        _C,        _C,    /* 0x1X */
  25.     _C,        _C,        _C,        _C,
  26.     _C,        _C,        _C,        _C,
  27.     _C,        _C,        _C,        _C,
  28.     0,        _P,        0,        0,    /* 0x2X */
  29.     _W,        _W,        0,        _W,
  30.     0,        0,        0,        0,
  31.     0,        0,        _P,        0,
  32.     _W,        _W,        _W,        _W,    /* 0x3X */
  33.     _W,        _W,        _W,        _W,
  34.     _W,        _W,        0,        0,
  35.     0,        0,        0,        _P,
  36.     0,        _U|_W,        _U|_W,        _U|_W,    /* 0x4X */
  37.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  38.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  39.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  40.     _U|_W,        _U|_W,        _U|_W,        _U|_W,    /* 0x5X */
  41.     _U|_W,        _U|_W,        _U|_W,        _U|_W,
  42.     _U|_W,        _U|_W,        _U|_W,        0,
  43.     0,        0,        0,        0,
  44.     0,        _L|_W,        _L|_W,        _L|_W,    /* 0x6X */
  45.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  46.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  47.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  48.     _L|_W,        _L|_W,        _L|_W,        _L|_W,    /* 0x7X */
  49.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  50.     _L|_W,        _L|_W,        _L|_W,        0,
  51.     0,        0,        0,        _C,
  52.     _U|_W,        _L|_W,        _L|_W,        _L|_W,    /* 0x8X */
  53.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  54.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  55.     _L|_W,        _L|_W,        _U|_W,        _U|_W,
  56.     _U|_W,        _L|_W,        _U|_W,        _L|_W,    /* 0x9X */
  57.     _L|_W,        _L|_W,        _L|_W,        _L|_W,
  58.     _L|_W,        _U|_W,        _U|_W,        0,
  59.     0,        0,        _L|_W,        0,
  60.     _L|_W,        _L|_W,        _L|_W,        _L|_W,    /* 0xAX */
  61.     _L|_W,        _U|_W,        _L|_W,        _L|_W,
  62.     0,        0,        0,        0,
  63.     0,        0,        0,        0,
  64.     _L|_W,        _L|_W,        _U|_W,        _L|_W,    /* 0xBX */
  65.     _L|_W,        _U|_W,        _U|_W,        _U|_W,
  66.     _U|_W,        0,        0,        0,
  67.     0,        0,        0,        0,
  68.     _L|_W,        _U|_W,        0,        0,    /* 0xCX */
  69.     0,        0,        0,        0,
  70.     0,        0,        0,        0,
  71.     0,        0,        0,        0,
  72.     0,        0,        0,        0,    /* 0xDX */
  73.     0,        0,        0,        0,
  74.     0,        0,        0,        0,
  75.     0,        0,        0,        0,
  76.     0,        0,        0,        0,    /* 0xEX */
  77.     0,        0,        0,        0,
  78.     0,        0,        0,        0,
  79.     0,        0,        0,        0,
  80.     0,        0,        0,        0,    /* 0xFX */
  81.     0,        0,        0,        0,
  82.     0,        0,        0,        0,
  83.     0,        0,        0,        0
  84. };
  85.  
  86.  
  87. /* Convert upper to lower and vice versa.  This is borrowed from
  88.  * Bernhard Nebel.
  89.  */
  90.  
  91. char cupper[256] = {
  92.     0x00,    0x01,    0x02,    0x03,    0x04,    0x05,    0x06,    0x07,
  93.     0x08,    0x09,    0x0a,    0x0b,    0x0c,    0x0d,    0x0e,    0x0f,
  94.     0x10,    0x11,    0x12,    0x13,    0x14,    0x15,    0x16,    0x17,
  95.     0x18,    0x19,    0x1a,    0x1b,    0x1c,    0x1d,    0x1e,    0x1f,
  96.     0x20,    0x21,    0x22,    0x23,    0x24,    0x25,    0x26,    0x27,
  97.     0x28,    0x29,    0x2a,    0x2b,    0x2c,    0x2d,    0x2e,    0x2f,
  98.     0x30,    0x31,    0x32,    0x33,    0x34,    0x35,    0x36,    0x37,
  99.     0x38,    0x39,    0x3a,    0x3b,    0x3c,    0x3d,    0x3e,    0x3f,
  100.     0x40,    0x41,    0x42,    0x43,    0x44,    0x45,    0x46,    0x47,
  101.     0x48,    0x49,    0x4a,    0x4b,    0x4c,    0x4d,    0x4e,    0x4f,
  102.     0x50,    0x51,    0x52,    0x53,    0x54,    0x55,    0x56,    0x57,
  103.     0x58,    0x59,    0x5a,    0x5b,    0x5c,    0x5d,    0x5e,    0x5f,
  104.     0x40,    0x41,    0x42,    0x43,    0x44,    0x45,    0x46,    0x47,
  105.     0x48,    0x49,    0x4a,    0x4b,    0x4c,    0x4d,    0x4e,    0x4f,
  106.     0x50,    0x51,    0x52,    0x53,    0x54,    0x55,    0x56,    0x57,
  107.     0x58,    0x59,    0x5a,    0x7b,    0x7c,    0x7d,    0x7e,    0x7f,
  108.     0x80,    0x9a,    0x90,    0x41,    0x8e,    0xb6,    0x8f,    0x80,
  109.     0x45,    0x45,    0x45,    0x49,    0x49,    0x49,    0x8e,    0x8f,
  110.     0x90,    0x92,    0x92,    0x4f,    0x99,    0x4f,    0x55,    0x55,
  111.     0x59,    0x99,    0x9a,    0x9b,    0x9c,    0x9d,    0x9e,    0x9f,
  112.     0x41,    0x49,    0x4f,    0x55,     0xa5,    0xa5,    0x41,    0x4f,
  113.     0xa8,    0xa9,    0xaa,    0xab,    0xac,    0xad,    0xae,    0xaf,
  114.     0xb7,    0xb8,    0xb2,    0xb2,    0xb5,    0xb5,    0xb6,    0xb7,
  115.     0xb8,    0xb9,    0xba,    0xbb,    0xbc,    0xbd,    0xbe,    0xbf,
  116.     0xc1,    0xc1,    0xc2,    0xc3,    0xc4,    0xc5,    0xc6,    0xc7,
  117.     0xc8,    0xc9,    0xca,    0xcb,    0xcc,    0xcd,    0xce,    0xcf,
  118.     0xd0,    0xd1,    0xd2,    0xd3,    0xd4,    0xd5,    0xd6,    0xd7,
  119.     0xd8,    0xd9,    0xda,    0xdb,    0xdc,    0xdd,    0xde,    0xdf,
  120.     0xe0,    0xe1,    0xe2,    0xe3,    0xe4,    0xe5,    0xe6,    0xe7,
  121.     0xe8,    0xe9,    0xea,    0xeb,    0xec,    0xed,    0xee,    0xef,
  122.     0xf0,    0xf1,    0xf2,    0xf3,    0xf4,    0xf5,    0xf6,    0xf7,
  123.     0xf8,    0xf9,    0xfa,    0xfb,    0xfc,    0xfd,    0xfe,    0xff
  124.     };
  125.  
  126. char clower[256] = {
  127.     0x00,    0x01,    0x02,    0x03,    0x04,    0x05,    0x06,    0x07,
  128.     0x08,    0x09,    0x0a,    0x0b,    0x0c,    0x0d,    0x0e,    0x0f,
  129.     0x10,    0x11,    0x12,    0x13,    0x14,    0x15,    0x16,    0x17,
  130.     0x18,    0x19,    0x1a,    0x1b,    0x1c,    0x1d,    0x1e,    0x1f,
  131.     0x20,    0x21,    0x22,    0x23,    0x24,    0x25,    0x26,    0x27,
  132.     0x28,    0x29,    0x2a,    0x2b,    0x2c,    0x2d,    0x2e,    0x2f,
  133.     0x30,    0x31,    0x32,    0x33,    0x34,    0x35,    0x36,    0x37,
  134.     0x38,    0x39,    0x3a,    0x3b,    0x3c,    0x3d,    0x3e,    0x3f,
  135.     0x60,    0x61,    0x62,    0x63,    0x64,    0x65,    0x66,    0x67,
  136.     0x68,    0x69,    0x6a,    0x6b,    0x6c,    0x6d,    0x6e,    0x6f,
  137.     0x70,    0x71,    0x72,    0x73,    0x74,    0x75,    0x76,    0x77,
  138.     0x78,    0x79,    0x7a,    0x5b,    0x5c,    0x5d,    0x5e,    0x5f,
  139.     0x60,    0x61,    0x62,    0x63,    0x64,    0x65,    0x66,    0x67,
  140.     0x68,    0x69,    0x6a,    0x6b,    0x6c,    0x6d,    0x6e,    0x6f,
  141.     0x70,    0x71,    0x72,    0x73,    0x74,    0x75,    0x76,    0x77,
  142.     0x78,    0x79,    0x7a,    0x7b,    0x7c,    0x7d,    0x7e,    0x7f,
  143.     0x87,    0x81,    0x82,    0x83,    0x84,    0x85,    0x86,    0x87,
  144.     0x88,    0x89,    0x8a,    0x8b,    0x8c,    0x8d,    0x84,    0x86,
  145.     0x82,    0x91,    0x91,    0x93,    0x94,    0x95,    0x96,    0x97,
  146.     0x98,    0x94,    0x81,    0x9b,    0x9c,    0x9d,    0x9e,    0x9f,
  147.     0xa0,    0xa1,    0xa2,    0xa3,    0xa4,    0xa4,    0xa6,    0xa7,
  148.     0xa8,    0xa9,    0xaa,    0xab,    0xac,    0xad,    0xae,    0xaf,
  149.     0xb0,    0xb1,    0xb1,    0xb3,    0xb4,    0xb4,    0x85,    0xb0,
  150.     0xb1,    0xb9,    0xba,    0xbb,    0xbc,    0xbd,    0xbe,    0xbf,
  151.     0xc0,    0xc0,    0xc2,    0xc3,    0xc4,    0xc5,    0xc6,    0xc7,
  152.     0xc8,    0xc9,    0xca,    0xcb,    0xcc,    0xcd,    0xce,    0xcf,
  153.     0xd0,    0xd1,    0xd2,    0xd3,    0xd4,    0xd5,    0xd6,    0xd7,
  154.     0xd8,    0xd9,    0xda,    0xdb,    0xdc,    0xdd,    0xde,    0xdf,
  155.     0xe0,    0xe1,    0xe2,    0xe3,    0xe4,    0xe5,    0xe6,    0xe7,
  156.     0xe8,    0xe9,    0xea,    0xeb,    0xec,    0xed,    0xee,    0xef,
  157.     0xf0,    0xf1,    0xf2,    0xf3,    0xf4,    0xf5,    0xf6,    0xf7,
  158.     0xf8,    0xf9,    0xfa,    0xfb,    0xfc,    0xfd,    0xfe,    0xff
  159.     };
  160.     
  161.  
  162. /*
  163.  * Find the name of a keystroke.  Needs to be changed to handle 8-bit printing
  164.  * characters and function keys better.     Returns a pointer to the terminating
  165.  * '\0'.
  166.  */
  167.  
  168. char *keyname(cp, k)
  169. register char *cp;
  170. register int k;
  171. {
  172.     register char *np;
  173. #ifdef    FKEYS
  174.     extern char *keystrings[];
  175. #endif /* FKEYS */
  176.  
  177.     if(k<0) k &= 0377;               /* if char was sign extened */
  178.     switch(k) {
  179.     case CCHR('@'): np = "NUL"; break;
  180.     case CCHR('I'): np = "TAB"; break;
  181.     case CCHR('J'): np = "LFD"; break; /* yuck, but that's what GNU calls it */
  182.     case CCHR('M'): np = "RET"; break;
  183.     case CCHR('['): np = "ESC"; break;
  184.     case ' ':    np = "SPC"; break; /* yuck again */
  185.     case CCHR('?'): np = "DEL"; break;
  186.     default:
  187. #ifdef    FKEYS
  188.         if(k >= KFIRST && k <= KLAST &&
  189.             (np = keystrings[k - KFIRST]) != NULL)
  190.         break;
  191. #endif /* FKEYS */
  192.         if(k > CCHR('?') || k < CCHR('@')) {
  193.         *cp++ = '0';
  194.         *cp++ = ((k>>6)&7) + '0';
  195.         *cp++ = ((k>>3)&7) + '0';
  196.         *cp++ = (k&7) + '0';
  197.         *cp = '\0';
  198.         return cp;
  199.         }
  200.         if(k < ' ') {
  201.         *cp++ = 'C';
  202.         *cp++ = '-';
  203.         k += '@';
  204.         if(ISUPPER(k)) k = TOLOWER(k);
  205.         }
  206.         *cp++ = k;
  207.         *cp = '\0';
  208.         return cp;
  209.     }
  210.     (VOID) strcpy(cp, np);
  211.     return cp + strlen(cp);
  212. }
  213.